package com.bawei.system.domain.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @Author：liurui
 * @Package：com.bawei.system.domain.DTO
 * @Project：mall_cloud
 * @name：ReindexRequestDTO
 */
@ApiModel(description = "")
@Data
public class ReindexRequestDto {
    // 源索引的名称，即需要从中读取数据的索引
    @ApiModelProperty(value = "源索引的名称，即需要从中读取数据的索引", position = 1)
    private String sourceIndex;

    // 目标索引的名称，即数据将被重新索引到的索引
    @ApiModelProperty(value = "目标索引的名称，即数据将被重新索引到的索引", position = 2)
    private String targetIndex;

    // 可选字段，用于指定重新索引过程中的Painless脚本
    // 可以是完整的脚本字符串，或者可以进一步拆分为scriptType, scriptSource, scriptParams等
    @ApiModelProperty(value = "可以是完整的脚本字符串，或者可以进一步拆分为scriptType, scriptSource, scriptParams等", position = 3)
    private String script;

    // 可选字段，批量处理大小，即每次从源索引读取并写入目标索引的文档数量
    // 如果没有指定，则使用Elasticsearch的默认值
    @ApiModelProperty(value = "如果没有指定，则使用Elasticsearch的默认值", position = 4)
    private Integer batchSize;

    // 可选字段，表示在重新索引完成后是否应该刷新目标索引
    // 默认为false，即不刷新
    @ApiModelProperty(value = "默认为false，即不刷新", position = 5)
    private Boolean refresh;

    // 可选字段，表示是否应该等待重新索引操作完成才返回响应
    // 默认为true，即等待完成
    @ApiModelProperty(value = "默认为true，即等待完成", position = 6)
    private Boolean waitForCompletion;

    // 构造器，用于创建ReindexRequestDTO对象
    public ReindexRequestDto(String sourceIndex, String targetIndex) {
        this.sourceIndex = sourceIndex;
        this.targetIndex = targetIndex;
        // 其他字段可以使用默认值
        this.batchSize = null; // 或者设置为Elasticsearch的默认值
        this.refresh = false;
        this.waitForCompletion = true;
    }

    // 构造器，包含所有字段
    public ReindexRequestDto(String sourceIndex, String targetIndex, String script, Integer batchSize, Boolean refresh, Boolean waitForCompletion) {
        this.sourceIndex = sourceIndex;
        this.targetIndex = targetIndex;
        this.script = script;
        this.batchSize = batchSize;
        this.refresh = refresh;
        this.waitForCompletion = waitForCompletion;
    }


}
